using Abp.Application.Services;
using Abp.Application.Services.Dto;
using SOEI.Solution.Application.Contracts.Customized.RegulatoryMange;
using SOEI.Solution.Application.Contracts.DomainEntities.RegulatoryMange.Dtos;
using SOEI.Solution.DomainEntities.RegulatoryMange.Dtos;
using System.Collections.Generic;
using System.Data;
using System.Threading.Tasks;

namespace SOEI.Solution.DomainEntities.RegulatoryMange
{
    public interface IAgreementAppService : IApplicationService
    {
        #region -------------------------------------------------辅助工具生成---------------------------------------------- 
        /// <summary>
        /// 获取的分页列表集合
        ///</summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task<PagedResultDto<AgreementViewListDto>> GetPaged(GetAgreementsInput input);


        /// <summary>
        /// 通过指定id获取ListDto信息
        /// </summary>
        Task<AgreementListDto> GetById(EntityDto<string> input);

        /// <summary>
        /// 返回实体的EditDto
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task<GetAgreementForEditOutput> GetForEdit(EntityDto<string> input);

        /// <summary>
        /// 添加或者修改的公共方法
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task<AgreementEditDto> CreateOrUpdate(CreateOrUpdateAgreementInput input);


        /// <summary>
        /// 删除
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task Delete(EntityDto<string> input);


        /// <summary>
        /// 批量删除
        /// </summary>
        Task BatchDelete(List<string> input);

        #endregion

        #region -------------------------------------------------用户自定义------------------------------------------------
        /*请在此扩展应用服务接口*/

        Task<ICollection<RegulatoryAccountViewDto>> GetBankList(GetSuperviseBanksInput input);

        Task<GetCanSignAgreementContractOutput> SelCanSignAgreementContract(GetCanSignAgreementContractInput input);

        /// <summary>
		/// 获取监管证明列表的分页列表集合
		///</summary>
        Task<PagedResultDto<AgreementViewListDto>> GetProvePaged(GetAgreementsInput input);

        /// <summary>提交监管协议
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task SubmitAgreement(EntityDto<string> input);

        /// <summary>监管协议变更保存信息
        /// </summary>
        Task<AgreementChangeEditDto> CreateOrUpdateAgreementChange(AgreementChangeInput input);

        /// <summary>获取监管协议变更信息
        /// </summary>
        Task<GetAgreementForEditOutput> GetForChangeEdit(EntityDto<string> input);

        /// <summary>提交监管协议变更信息
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task SubmitAgreementChange(EntityDto<string> input);

        /// <summary>获取水印编号
        /// </summary>
        /// <returns></returns>
        Task<string> FindWaterCode();

        Task<DataSet> FindJGYHList();

        /// <summary>
		/// 【Edit By hua】 根据 JGXYBH 获取所有签署对象 
		/// </summary>
		/// <returns></returns>
		Task<ICollection<AgreementBoth>> GetAgreementBothsFromID(EntityDto<string> input);


        /// <summary>
		/// 发起全体邀请通知(已经发送过的就不在发送了)
		/// </summary>
		/// <returns></returns>
		Task SendAllForBothsNotify(BothsNotifyInput input);
        #endregion
    }
}
